#include "handler_library.c"

/*##################################################################################################
 # Variables
 ##################################################################################################*/

int timer = QUANTUM;

/*##################################################################################################
 # Functions
 ##################################################################################################*/
void reset_timer()
{
 timer = QUANTUM;
 puts("Timer reset to quantum.\n");
}


int_controller()
{
//decrements io device and timer.
//checks for interrupt. what happens if multiple interrupts occur at the same time.
if(timer == 0)
{
        timer_int_handler();
        reset_timer();
}
if (kbhit()) {
	int ch = get_key_pressed();
	//call the keyboard interrupt handler
	printf("Keyboard key was pressed. Interrupt occurred.\n");
}

}


cpu()
{
	int next_req = ready_queue->head->next->request_index;
	if( ready_queue->head->next->pid->no_requests > 0)
	{
		if((QUANTUM - timer) == ready_queue->head->next->pid->requests[next_req])
		{
			io_system_call(ready_queue->head->next->pid->req_type[next_req]);
			return 0;
		}
	}
			
        //decrements process counter.
        timer--;

	if(check_process_done(timer) == 0)
        {
        	ready_queue_process_remove();
		get_next_process_running();
        }
        else
        {
                puts("Next cpu cycle. \n");
                timer_tick();
                int_controller();

     	}

}
